#include "Hash.h"
HASH::HASH()
{
    // 初始化 SM3 上下文
    ctx_hash = EVP_MD_CTX_new();
}

HASH::~HASH()
{
    // 清理
    if (ctx_hash != NULL)
    {
        EVP_MD_CTX_free(ctx_hash);
    }
}

CString HASH::Hash(CString data, HASH_TYPE mode)
{
    uint8_t in_buf[2048] = { 0 };
    uint8_t hash_data[128] = { 0 };
    size_t hash_len = 0;

    data.touint8(in_buf);

    EVP_DigestInit_ex(ctx_hash, hash_fun[mode](), NULL);
    // 提供数据
    EVP_DigestUpdate(ctx_hash, in_buf, data.size() / 2);

    // 获取哈希值
    EVP_DigestFinal_ex(ctx_hash, hash_data, &hash_len);

    return CString(hash_data,hash_len);
}






